import { REGULAR_ID_CARD } from '../../../likit-lib/lib/regular';
/**
 * 身份证校验
 * @param idCard 身份证号码
 * @returns
 */

function validateIdCard(idCard) {
  // 15位和18位身份证号码的正则表达式
  var regularIdCard = REGULAR_ID_CARD; // 如果通过该验证，说明身份证格式正确，但准确性还需计算

  if (regularIdCard.test(idCard)) {
    if (idCard.length === 18) {
      // 将前17位加权因子保存在数组里
      var idCardWi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 这是除以11后，可能产生的11位余数、验证码，也保存成数组

      var idCardY = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 用来保存前17位各自以加权因子后的总和

      var idCardWiSum = 0;

      for (var i = 0; i < 17; i += 1) {
        idCardWiSum += window.parseInt(idCard.substring(i, i + 1), 10) * idCardWi[i];
      } // 计算出校验码所在数组的位置


      var idCardMod = idCardWiSum % 11; // 得到最后一位身份证号码

      var idCardLast = idCard.substring(17); // 如果等于2，则说明校验码是10，身份证号码最后一位应该是X

      if (idCardMod === 2) {
        if (idCardLast === 'X' || idCardLast === 'x') {
          return true;
        }

        return false;
      } // 用计算出的验证码与最后一位身份证号码匹配，如果一致，说明通过，否则是无效的身份证号码


      return idCardLast === "".concat(idCardY[idCardMod]);
    }
  }

  return false;
}

export { validateIdCard };
export default {
  validateIdCard: validateIdCard
};